#ifndef XC_LOG_H
#define XC_LOG_H

#ifdef  XC_MOUDLE
#endif

//----------------------------------------------
template<class T>
static void mkValue(wstring &strText, T t)
{
	strText += L"?";
}
template<class T>
static void mkValue(wstring &strText, const CXText& value_)
{
	strText += value_.toStr();
}
template<class T>
static void mkValue(wstring &strText, T* value_)
{
	wchar_t make_buf[12] = { 0 };
	swprintf_s(make_buf, L"0x%08X", (unsigned int)value_);
	strText += make_buf;
}
static void mkValue(wstring &strText, UINT value_)
{
	wchar_t make_buf[12] = { 0 };
	_ultow_s(value_, make_buf, 10);
	strText += make_buf;
}

static void mkValue(wstring &strText, int value_)
{
	wchar_t make_buf[12] = { 0 };
	_itow_s(value_, make_buf, 10);
	strText += make_buf;
}

static void mkValue(wstring &strText, long value_)
{
	wchar_t make_buf[12] = { 0 };
	_itow_s(value_, make_buf, 10);
	strText += make_buf;
}

static void mkValue(wstring &strText, const wchar_t* value_)
{
	strText += value_;
}

static void mkValue(wstring &strText, wchar_t* value_)
{
	strText += value_;
}

static void mkValue(wstring &strText, wchar_t value_)
{
	mkValue(strText, (int)value_);
}

static void mkValue(wstring &strText, const wstring& value_)
{
	strText += value_;
}

static void mkValue(wstring &strText, CXText& value_)
{
	strText += value_.toStr();
}

static void mkValue(wstring &strText, USHORT value_)
{
	mkValue(strText, (int)value_);
}

static void mkValue(wstring &strText, SHORT value_)
{
	mkValue(strText, (int)value_);
}

static void mkValue(wstring &strText, BYTE value_)
{
	mkValue(strText, (int)value_);
}

static void mkValue(wstring &strText, float value_)
{
	wchar_t make_buf[32] = { 0 };
	swprintf_s(make_buf, L"%f", value_);
	strText += make_buf;
}

static void mkValue(wstring &strText, double value_)
{
	wchar_t make_buf[32] = { 0 };
	swprintf_s(make_buf, L"%f", value_);
	strText += make_buf;
}

//----------log-------------------------
template<class T>
void xc_log(T t)
{
	wstring strText;
	mkValue(strText, t);
	strText += L"\n";
	OutputDebugStringW(strText.c_str());
}

template<class T1, class T2>
void xc_log(T1 t1, T2 t2)
{
	wstring strText;
	mkValue(strText, t1);
	mkValue(strText, t2);
	strText += L"\n";
	OutputDebugStringW(strText.c_str());
}

template<class T1, class T2, class T3>
void xc_log(T1 t1, T2 t2, T3 t3)
{
	wstring strText;
	mkValue(strText, t1);
	mkValue(strText, t2);
	mkValue(strText, t3);
	strText += L"\n";
	OutputDebugStringW(strText.c_str());
}

template<class T1, class T2, class T3, class T4>
void xc_log(T1 t1, T2 t2, T3 t3, T4 t4)
{
	wstring strText;
	mkValue(strText, t1);
	mkValue(strText, t2);
	mkValue(strText, t3);
	mkValue(strText, t4);
	strText += L"\n";
	OutputDebugStringW(strText.c_str());
}

template<class T1, class T2, class T3, class T4, class T5>
void xc_log(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
{
	wstring strText;
	mkValue(strText, t1);
	mkValue(strText, t2);
	mkValue(strText, t3);
	mkValue(strText, t4);
	mkValue(strText, t5);
	strText += L"\n";
	OutputDebugStringW(strText.c_str());
}

template<class T1, class T2, class T3, class T4, class T5, class T6>
void xc_log(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
{
	wstring strText;
	mkValue(strText, t1);
	mkValue(strText, t2);
	mkValue(strText, t3);
	mkValue(strText, t4);
	mkValue(strText, t5);
	mkValue(strText, t6);
	strText += L"\n";
	OutputDebugStringW(strText.c_str());
}

template<class T1, class T2, class T3, class T4, class T5, class T6, class T7>
void xc_log(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
{
	wstring strText;
	mkValue(strText, t1);
	mkValue(strText, t2);
	mkValue(strText, t3);
	mkValue(strText, t4);
	mkValue(strText, t5);
	mkValue(strText, t6);
	mkValue(strText, t7);
	strText += L"\n";
	OutputDebugStringW(strText.c_str());
}

template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8>
void xc_log(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
{
	wstring strText;
	mkValue(strText, t1);
	mkValue(strText, t2);
	mkValue(strText, t3);
	mkValue(strText, t4);
	mkValue(strText, t5);
	mkValue(strText, t6);
	mkValue(strText, t7);
	mkValue(strText, t8);
	strText += L"\n";
	OutputDebugStringW(strText.c_str());
}

template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9>
void xc_log(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
{
	wstring strText;
	mkValue(strText, t1);
	mkValue(strText, t2);
	mkValue(strText, t3);
	mkValue(strText, t4);
	mkValue(strText, t5);
	mkValue(strText, t6);
	mkValue(strText, t7);
	mkValue(strText, t8);
	mkValue(strText, t9);
	strText += L"\n";
	OutputDebugStringW(strText.c_str());
}

#endif  //XC_LOG_H